package br.memorando

import br.academia.Professor
import br.atribuicoes.professor.producaoAcademica.ProducaoAcademica;

class MemorialService {

    static transactional = true

	/**
	 * Descricao: pega as producoes academicas de um professor
	 * @param professor
	 * @return um map com os tipos de produçoes academicas
	 * @author henrique
	 */
    def getProducoesAcademica(Professor professor) {
		
		List<ProducaoAcademica> producoesAcademicasList = Professor.findAllByProducoesAcademica(professor)
		log.debug("professor: "+professor+" producoesAcademicas: "+producoesAcademicasList)
		
		int pontuacaoTotalProducoesAcademicas = 0
		
		Map producoesAcademicas = [artigosList: null
					, pontuacaoTotalArtigos : 0
					, bancasDefesasList : null
					, pontuacaoTotalBancasDefesas : 0
					, bancasLivreList : null
					, pontuacaoTotalBancasLivre : 0
					, consultoriaEmRevistaList : null
					, eventosList : null
					, pontuacaoTotalEventos : 0
					, publicacaoCapitulosList : null
					, pontuacaoTotalPublicacaoCapitulos : 0
					, publicacaoLivrosList : null
					, pontuacaoTotalPublicacaoLivros : 0
					, bancasQualificacaoList : null
					, pontuacaoTotalBancasQualificacao : 0
					, comunicacaoList : null
					, pontuacaoTotalComunicacao : 0
					]
		
		
		producoesAcademicasList.each { prodAcad ->
			if(prodAcad.artigo != null){
				producoesAcademicas.artigosList.add(prodAcad.artigo)
				producoesAcademicas.pontuacaoTotalArtigos += prodAcad.artigo.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalArtigos
			}
			
			if(prodAcad.bancasDefesas != null){
				producoesAcademicas.bancasDefesasList.add(prodAcad.bancasDefesas)
				producoesAcademicas.pontuacaoTotalBancasDefesas += prodAcad.bancasDefesas.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalBancasDefesas
			}
			
			if(prodAcad.bancasLivre != null){
				producoesAcademicas.bancasLivreList.add(prodAcad.bancasLivre)
				producoesAcademicas.pontuacaoTotalBancasLivre += prodAcad.bancasLivre.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalBancasLivre
			}
			
			if(prodAcad.consultoriaEmRevista != null){
				producoesAcademicas.consultoriaEmRevistaList.add(prodAcad.consultoriaEmRevista)
				producoesAcademicas.pontuacaoTotalConsultoriaEmRevista += prodAcad.consultoriaEmRevista.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalConsultoriaEmRevista
			}
			
			if(prodAcad.eventos != null){
				producoesAcademicas.eventosList.add(prodAcad.eventos)
				producoesAcademicas.pontuacaoTotalEventos += prodAcad.eventos.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalEventos
			}
			
			if(prodAcad.publicacaoCapitulos != null){
				producoesAcademicas.publicacaoCapitulosList.add(prodAcad.publicacaoCapitulos)
				producoesAcademicas.pontuacaoTotalPublicacaoCapitulos += prodAcad.publicacaoCapitulos.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalPublicacaoCapitulos
			}
			
			if(prodAcad.publicacaoLivros != null){
				producoesAcademicas.publicacaoLivrosList.add(prodAcad.publicacaoLivros)
				producoesAcademicas.pontuacaoTotalPublicacaoLivros += prodAcad.publicacaoLivros.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalPublicacaoLivros
			}
			
			if(prodAcad.bancasQualificacao != null){
				producoesAcademicas.bancasQualificacaoList.add(prodAcad.bancasQualificacao)
				producoesAcademicas.pontuacaoTotalBancasQualificacao += prodAcad.bancasQualificacao.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalBancasQualificacao
			}
			
			if(prodAcad.comunicacao != null){
				producoesAcademicas.comunicacaoList.add(prodAcad.comunicacao)
				producoesAcademicas.pontuacaoTotalComunicacao += prodAcad.comunicacao.tipoAtividadeProducaoAcademica.pontuacao
				pontuacaoTotalProducoesAcademicas += producoesAcademicas.pontuacaoTotalComunicacao
			}
		}
		
		return producoesAcademicas
    }
	def getAtividadesAdministrativas(Professor professor){
		
	}
}
